mongodb默认不启用授权认证,只要能连接到该服务器,就可连接到mongod。在本地开发的时候我们经常会忽略掉auth,只有到了生产环节才会启用auth。很多经验不多的童鞋甚至部署到生产环节都没有启用认证!但这是不安全的,因为这样相当于你的数据库直接暴露在公网,不对bindIp进行验证的话,任何机器都能够访问你的MongoDB就不好了。
Mongodb使用 auth
通过命令行启动
1 | mongod --dbpath /export/mongo/ --auth |
修改配置文件
打开mongod.conf1
2
3
4
5
6
7vi /etc/mongo/mongod.conf
# 加入2行
security:
authorization: enabled
# 启动
mongod -f mongod.conf
在实际生产环境中,我们通常采用第二种方法。
下面看看如何创建访问控制权限
mongoDB 没有超级无敌用户root,只有能管理用户的用户 userAdminAnyDatabase。
添加用户
1 | use admin |
在mongo shell中执行以上命令,我们就创建了一个管理员账号!
接下来,我们添加某个库的用户1
2
3
4
5
6
7
8use test
db.createUser(
{
user: "test",
pwd: "test",
roles: [ { role: "userAdminAnyDatabase", db: "test" } ]
}
)
这里需要说明下:默认情况下我们在对应的库下添加用户,用户跟着库走!当然你也可以在admin库下,直接添加,但是admin创建的,只能先进入admin后再进行切换!
第一次创建admin账号后,需要重启mongo服务!让auth生效!如果已经启用auth,后续增加用户不用重启!
查看创建的用户
所有用户都存在amdin库下的 system.users 这个表中!1
2use admin
db.system.users.find()
当然也可以用 show users 查看刚刚创建的用户
使用新的用户登录mongo shell
中断mongo shell,重新登录1
mongo 127.0.0.1/test -utest -ptest
上面即用创建的test账号登录test库下,执行show collections可以查看到test库下的所有表。
不中断mnongo shell1
2use test
db.auth('test', 'test') #授权下
增删角色
1 | # 授予角色 |
这个非常有用,对于我们控制权限非常有帮助!!
例子-在admin账号中添加一个权限,这样admin账户对所有databases都可以操作!1
db.grantRolesToUser( "admin" , [ { role: "readWriteAnyDatabase", db: "admin" } ])